EF entiteiten
Home

EF entiteiten

EF entiteiten

Centraal in het mapping verhaal staat het concept van de entiteit.

Een entiteit is een klasse die toegewezen is aan een Entity Framework context met een eigen identiteit, of een eigenschap die op een unieke wijze instanties ervan identificeert. In DDD (domain driven design) jargon, spreekt men van een aggregate root als het de bedoeling is om de entiteit direct te bevragen, denk aan een Order of een Curstomer. Een entiteit kan ook samen met een aggregate root worden geladen en niet op zichzelf bestaan zoals bijvoorbeeld OrderItem. Een entiteit wordt opgeslagen in zijn eigen tabel en kan één of meerdere validatie-methoden hebben.

Een domein model waarin de entiteiten alleen eigenschappen (gegevens) en geen methoden (gedrag) bevatten, wordt ook wel een anemisch domein model genoemd. Je kunt een goede beschrijving voor deze anti-patroon op Martin Fowler's website.

De entiteitsklase kan verschillende soorten eigenschappen bevatten.

Scalaire eigenschap

Scalaire eigenchappan zijn eenvoudig waarden, zoals strings, datums en getallen. Daarin worden de data van de entiteit opgeslagen,

SQL Data Types .Net Omschrijving
bigint Int54 Integer data van -2^63 (-9223372036854775808) tot 2^63-1 (9223372036854775807)
int Int32 Integer data van -2^31 (-2.147.483.648) tot 2^31-1 (2.147.483.647)
smallint Int16 Integer data van -2^15 (-32,768) tot 2^15-1 (32.767)
tinyint Byte Integer data van 0 tot 255
bit Boolean Integer data van 1 of 0 (Boolean bijv. ja/nee)
decimal Decimal Numerieke data types als niet opgegeven dan van -10^38+1 tot 10^38-1 (p) Precision : De maximale totale lengte van decimale digits die opgeslagen kunnen worden. (s) Scale : Het maximale aantal nummers die rechts van de komma opgeslagen kunnen worden.
numeric Idem decimal
money Decimal Valuta data van -2^63 (-9223372036854775808) tot 2^63-1 (9223372036854775807)
smallmoney Decimal Valute data van -2.147.483.648) tot 2^31-1 (2.147.483.647)
float Double Floating precisie nummer data van - 1.79E + 308 tot -2.23E - 308, 0 en 2.23E -308 tot 1.79E + 308
real Single idem float
datetime DateTime Datum en tijd van 1 januari 1753 tot 31 december 9999 met een precisie van 3.33 milliseconde
smalldatetime DateTime Datum en tijd van 1 januari 1900 tot 6 juni 2079 met een precisie van 1 seconde
char Char Vaste lengte character data met een lengte van 8000 character
varchar string Variabele lengte data met een maximum lengte van 8000 characters
nchar string Vaste lengte unicode data met een lengte van 4000 Characters
nvarchar string Variabele lengte unicode data met een maximum lengte van 4000 Characters
binary Byte[] Vaste lengte binary data met een vaste lengte van 8000 bytes
varbinary Byte[] Variabele lengte binary data met een vaste lengte van 8000 bytes
timestamp DateTime een database-wide unieke nummer dat iedere keer geupdate wordt als de rij gemuteerd wordt
uniqueidentifier Guid een globally unique identifier

Voor de types Byte, Char en String kan je een maximale lengte opgegeven. Een waarde van -1 betekent de maximum waarde. Alle scalaire types kunnen nullable worden gemaakt, wat betekent dat ze kan geen ingestelde waarde kunnen hebben. In de databank wordt dit weergegeven door een NULL kolom. Scalaire eigenschappen moeten zowel een getter en een setter hebben, maar een setter kan een beperkter bereik hebben dan de getter: internal, protected internal of protected.

Enkele voorbeelden

public int OrderID { get; set; }
public int CustomerID { get; set; }
public DateTime OrderDate { get; set; }
​public int CustomerID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }

Identiteitseigenschap (identity property)

Één of meer van de scalaire eigenschappen van je entiteit moet de primaire sleutel van de onderliggende tabel voorstellen. Die sleutel kan enkelvoudig of samengestelde zijn.
Een primaire-sleutel-eigenschap moet één van de basistypen zijn uit de lijst hierboven. Dus geen arrays en opsommingen, en ook geen complexe eigenschappen of typen gebaseerd op een andere entiteit.

Referentieeigenschap (reference property)

Een verwijzing van een entiteit naar de andere definieert een bidirectionele relatie. Er zijn twee types verwantschapsrelaties:

In EFCF worden meerdere instanties, die gekoppeld zijn aan een instantie van een ander type, voorgesteld door collecties. En een associatie wordt vertegenwoordigd door een eigenschap van het type van de andere entiteit.

public class Customer
{
   // one end point of a many to one relationship
   // a customer has one of many orders
   public virtual ICollection Orders { get; set; }
}

public class OrderItem
{
   // one endpoint of one to one relationship
   // one OrderItem belongs to one order
   public virtual Order Order { get; set; }
   // one OrderItem has one Product
   public virtual Product Product { get; set; }
}

Door alleen te kijken naar één eindpunt, kunnen we niet direct zeggen wat het type is (één-op-één of veel-op-een), we moeten kijken naar beide eindpunten.

In Entity Framework kan je collecties alleen declareren als ICollection (of een afgeleide klasse of interface) eigenschappen. In de entiteit, worden de collecties eigenschappen altijd in de constructor geïnitialiseerd.

Complexe eigenschap (complex property)

Dit onderdeel is nog niet klaar.

JI
2016-11-23 13:14:46